﻿using System;
using System.Collections.Generic;
using System.Text;

using System.Data;
using System.Data.Odbc;
using WLMCoreLibrary;

using System.Xml;
using System.Xml.Serialization;
using System.ComponentModel;
using System.CodeDom.Compiler;
using System.Configuration;
using System.IO;

namespace SAW_Core
{
    [Serializable]
    [DesignerCategory("code")]
    [XmlRoot(Namespace = "http://wlm.com.mx/SAI/proveedor", IsNullable = false)]
    [XmlType(AnonymousType = true, Namespace = "http://wlm.com.mx/SAI/proveedor")]
    [GeneratedCode("xsd", "2.0.50727.3038")]
    public class Proveedor : BaseClass
    {
       

        #region public properties
        [XmlIgnore()]
        public int idEmpresa { get;set; }
        [XmlAttributeAttribute()]
        public String NoCliente { get;set; }
        [XmlAttributeAttribute()]
        public String RazonSocial { get;set; }
        [XmlAttributeAttribute()]
        public String NombreComercial { get;set; }
        [XmlAttributeAttribute()]
        public String RepresentanteLegal { get;set; }
        [XmlAttributeAttribute()]
        public String CuentaBanco { get;set; }
        [XmlAttributeAttribute()]
        public String RFC { get;set; }
        [XmlAttributeAttribute()]
        public String Email { get;set; }
        public Direccion DireccionFacturacion { get;set; }
        public Direccion DireccionEnvio { get;set; }
        [XmlAttributeAttribute()]
        public String Telefono { get;set; }
        [XmlAttributeAttribute()]
        public String Telefono2 { get;set; }
        [XmlAttributeAttribute()]
        public String Telefono3 { get;set; }
        [XmlAttributeAttribute()]
        public String FAX { get;set; }
        [XmlAttributeAttribute()]
        public String Banco { get;set; }
        [XmlAttributeAttribute()]
        public String LineaTransporte { get;set; }
        [XmlAttributeAttribute()]
        public int idLineaTransporte { get;set; }
        [XmlAttributeAttribute()]
        public Decimal SaldoActual { get;set; }
        [XmlAttributeAttribute()]
        public Decimal LimiteCredito { get;set; }
        [XmlAttributeAttribute()]
        public String WebSite { get;set; }
        public String Observaciones { get;set; }
        [XmlAttributeAttribute()]
        public Boolean activo { get;set; }
        [XmlAttributeAttribute()]
        public int idListaPrecios { get;set; }
        [XmlAttributeAttribute()]
        public int idVendedor { get;set; }
        [XmlAttributeAttribute()]
        public int idCategoria { get;set; }
        [XmlAttributeAttribute()]
        public int idCondicionesPago { get;set; }
        [XmlIgnore()]
        public List<Contacto> Contactos { get;set; }

        [XmlAttributeAttribute()]
        public string NombreCategoria { get;set; }
        [XmlAttributeAttribute()]
        public string NombreVendedor { get;set; }
        [XmlAttributeAttribute()]
        public string NombreCondicionesPago { get;set; }
        [XmlAttributeAttribute()]
        public Decimal UltimaCompra { get;set; }
        [XmlAttributeAttribute()]
        public DateTime FechaUltimaCompra { get;set; }
        [XmlAttributeAttribute()]
        public Decimal UltimoPago { get;set; }
        [XmlAttributeAttribute()]
        public DateTime FechaUltimoPago { get;set; }
        [XmlAttributeAttribute()]
        public Decimal UltimaCotizacion { get;set; }
        [XmlAttributeAttribute()]
        public DateTime FechaUltimaCotizacion { get;set; }
        #endregion

        #region constructors
        public Proveedor()
        {
        }

        public Proveedor(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            id = classBinder.NewRecord("PROVEEDORES");
            string queryString = "";
            queryString = "SELECT * FROM PROVEEDORES WHERE id='" + this.id + "'";
            GetRecord(queryString);
        }

        public Proveedor(int registryId,ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM PROVEEDORES WHERE id='" + registryId + "'";
            
            this.GetRecord(queryString);
        }
        public Proveedor(DataRow dataRow,ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            this.GetRecord(dataRow);
        }
        #endregion

        #region public methods


        public void Delete()
        {
            activo = false;
            Save();

            //string queryString = "";
            //queryString = "DELETE FROM PROVEEDORES WHERE id='" + this.id + "'";
            //ConexionDBInterna.ExecuteCommand(queryString);

        }

        public void GenerarArchivoXML()
        {
            StringBuilder salida = new StringBuilder();
            XmlSerializer serializer = new XmlSerializer(typeof(Proveedor));

            string rutaArchivos = "";
            string nombreArchivo = id.ToString("00000");

            rutaArchivos += "ProveedoresXML/" + id.ToString("00000") + "/";
            DirectoryInfo directorio = new DirectoryInfo(ConfigurationManager.AppSettings["sitePath"] + rutaArchivos);
            if (!directorio.Exists)
                directorio.Create();



            string archivo = ConfigurationManager.AppSettings["sitePath"] + rutaArchivos + nombreArchivo + ".xml";
            TextWriter tw = new StreamWriter(archivo);
            serializer.Serialize(tw, this);
            tw.Close();

            //PDFCreator pdf = new PDFCreator();
            //pdf.CrearPDFdeHTML(WLMFunctions.TransformXML(ConfigurationManager.AppSettings["siteURL"] + rutaArchivos + nombreArchivo + ".xml", ConfigurationManager.AppSettings["siteURL"] + "cotizacionImpresion.xsl"), nombreArchivo + ".pdf", rutaArchivos, false, false);
        }
        #endregion


        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                    id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                   fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion")))
                   fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                    idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion")))
                    idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];
                if (!reader.IsDBNull(reader.GetOrdinal("idEmpresa")))
                    idEmpresa = (System.Int32)reader["idEmpresa"];
                if (!reader.IsDBNull(reader.GetOrdinal("NoProveedor")))
                   NoCliente = (System.String)reader["NoProveedor"];
                if (!reader.IsDBNull(reader.GetOrdinal("RazonSocial")))
                   RazonSocial = (System.String)reader["RazonSocial"];
                if (!reader.IsDBNull(reader.GetOrdinal("NombreComercial")))
                   NombreComercial = (System.String)reader["NombreComercial"];
                if (!reader.IsDBNull(reader.GetOrdinal("RepresentanteLegal")))
                   RepresentanteLegal = (System.String)reader["RepresentanteLegal"];
                if (!reader.IsDBNull(reader.GetOrdinal("RFC")))
                   RFC = (System.String)reader["RFC"];
                if (!reader.IsDBNull(reader.GetOrdinal("Email")))
                   Email = (System.String)reader["Email"];


                if (!reader.IsDBNull(reader.GetOrdinal("F_Calle")))
                    DireccionFacturacion.Calle = (System.String)reader["F_Calle"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_NumeroExterior")))
                    DireccionFacturacion.NumeroExterior = (System.String)reader["F_NumeroExterior"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_NumeroInterior")))
                    DireccionFacturacion.NumeroInterior = (System.String)reader["F_NumeroInterior"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_Colonia")))
                    DireccionFacturacion.Colonia = (System.String)reader["F_Colonia"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_Municipio")))
                    DireccionFacturacion.Municipio = (System.String)reader["F_Municipio"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_Ciudad")))
                    DireccionFacturacion.Ciudad = (System.String)reader["F_Ciudad"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_Estado")))
                    DireccionFacturacion.Estado = (System.String)reader["F_Estado"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_CP")))
                    DireccionFacturacion.CP = (System.String)reader["F_CP"];

                if (!reader.IsDBNull(reader.GetOrdinal("Calle")))
                    DireccionEnvio.Calle = (System.String)reader["Calle"];
                if (!reader.IsDBNull(reader.GetOrdinal("NumeroExterior")))
                    DireccionEnvio.NumeroExterior = (System.String)reader["NumeroExterior"];
                if (!reader.IsDBNull(reader.GetOrdinal("NumeroInterior")))
                    DireccionEnvio.NumeroInterior = (System.String)reader["NumeroInterior"];
                if (!reader.IsDBNull(reader.GetOrdinal("Colonia")))
                    DireccionEnvio.Colonia = (System.String)reader["Colonia"];
                if (!reader.IsDBNull(reader.GetOrdinal("Ciudad")))
                    DireccionEnvio.Ciudad = (System.String)reader["Ciudad"];
                if (!reader.IsDBNull(reader.GetOrdinal("Municipio")))
                    DireccionEnvio.Municipio = (System.String)reader["Municipio"];
                if (!reader.IsDBNull(reader.GetOrdinal("Estado")))
                    DireccionEnvio.Estado = (System.String)reader["Estado"];
                if (!reader.IsDBNull(reader.GetOrdinal("CP")))
                    DireccionEnvio.CP = (System.String)reader["CP"];

                if (!reader.IsDBNull(reader.GetOrdinal("Telefono")))
                   Telefono = (System.String)reader["Telefono"];
                if (!reader.IsDBNull(reader.GetOrdinal("Telefono2")))
                   Telefono2 = (System.String)reader["Telefono2"];
                if (!reader.IsDBNull(reader.GetOrdinal("Telefono3")))
                   Telefono3 = (System.String)reader["Telefono3"];
                if (!reader.IsDBNull(reader.GetOrdinal("FAX")))
                   FAX = (System.String)reader["FAX"];
                if (!reader.IsDBNull(reader.GetOrdinal("LineaTransporte")))
                   LineaTransporte = (System.String)reader["LineaTransporte"];
                if (!reader.IsDBNull(reader.GetOrdinal("idLineaTransporte")))
                    idLineaTransporte = (System.Int32)reader["idLineaTransporte"];
                if (!reader.IsDBNull(reader.GetOrdinal("SaldoActual")))
                   SaldoActual = (System.Decimal)reader["SaldoActual"];
                if (!reader.IsDBNull(reader.GetOrdinal("LimiteCredito")))
                   LimiteCredito = (System.Decimal)reader["LimiteCredito"];
                if (!reader.IsDBNull(reader.GetOrdinal("WebSite")))
                   WebSite = (System.String)reader["WebSite"];
                if (!reader.IsDBNull(reader.GetOrdinal("Observaciones")))
                   Observaciones = (System.String)reader["Observaciones"];
                if (!reader.IsDBNull(reader.GetOrdinal("activo")))
                   activo = Convert.ToBoolean(reader["activo"]);
                if (!reader.IsDBNull(reader.GetOrdinal("idListaPrecios")))
                    idListaPrecios = (System.Int32)reader["idListaPrecios"];
                if (!reader.IsDBNull(reader.GetOrdinal("idVendedor")))
                    idVendedor = (System.Int32)reader["idVendedor"];
                if (!reader.IsDBNull(reader.GetOrdinal("idCategoria")))
                    idCategoria = (System.Int32)reader["idCategoria"];
                if (!reader.IsDBNull(reader.GetOrdinal("idCondicionesPago")))
                    idCondicionesPago = (System.Int32)reader["idCondicionesPago"];
            }
        }


        private void GetRecord(DataRow dataRow)
{
    if (dataRow != null)
    {
        if (dataRow["id"] != null)
            id = (System.Int32)dataRow["id"];
        if (dataRow["fechaCreacion"] != null)
           fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
        if (dataRow["fechaModificacion"] != null)
           fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
        if (dataRow["idUsuario"] != null)
            idUsuario = (System.Int32)dataRow["idUsuario"];
        if (dataRow["idUsuarioModificacion"] != null)
            idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
        if (dataRow["idEmpresa"] != null)
            idEmpresa = (System.Int32)dataRow["idEmpresa"];
        if (dataRow["NoProveedor"] != null)
           NoCliente = (System.String)dataRow["NoProveedor"];
        if (dataRow["RazonSocial"] != null)
           RazonSocial = (System.String)dataRow["RazonSocial"];
        if (dataRow["NombreComercial"] != null)
           NombreComercial = (System.String)dataRow["NombreComercial"];
        if (dataRow["RepresentanteLegal"] != null)
           RepresentanteLegal = (System.String)dataRow["RepresentanteLegal"];
        if (dataRow["RFC"] != null)
           RFC = (System.String)dataRow["RFC"];
        if (dataRow["Email"] != null)
           Email = (System.String)dataRow["Email"];

        if (dataRow["F_Calle"] != null)
            DireccionFacturacion.Calle = (System.String)dataRow["F_Calle"];
        if (dataRow["F_NumeroExterior"] != null)
            DireccionFacturacion.NumeroExterior = (System.String)dataRow["F_NumeroExterior"];
        if (dataRow["F_NumeroInterior"] != null)
            DireccionFacturacion.NumeroInterior = (System.String)dataRow["F_NumeroInterior"];
        if (dataRow["F_Colonia"] != null)
            DireccionFacturacion.Colonia = (System.String)dataRow["F_Colonia"];
        if (dataRow["F_Municipio"] != null)
            DireccionFacturacion.Municipio = (System.String)dataRow["F_Municipio"];
        if (dataRow["F_Ciudad"] != null)
            DireccionFacturacion.Ciudad = (System.String)dataRow["F_Ciudad"];
        if (dataRow["F_Estado"] != null)
            DireccionFacturacion.Estado = (System.String)dataRow["F_Estado"];
        if (dataRow["F_CP"] != null)
            DireccionFacturacion.CP = (System.String)dataRow["F_CP"];


        if (dataRow["Calle"] != null)
            DireccionEnvio.Calle = (System.String)dataRow["Calle"];
        if (dataRow["NumeroExterior"] != null)
            DireccionEnvio.NumeroExterior = (System.String)dataRow["NumeroExterior"];
        if (dataRow["NumeroInterior"] != null)
            DireccionEnvio.NumeroInterior = (System.String)dataRow["NumeroInterior"];
        if (dataRow["Colonia"] != null)
            DireccionEnvio.Colonia = (System.String)dataRow["Colonia"];
        if (dataRow["Ciudad"] != null)
            DireccionEnvio.Ciudad = (System.String)dataRow["Ciudad"];
        if (dataRow["Municipio"] != null)
            DireccionEnvio.Municipio = (System.String)dataRow["Municipio"];
        if (dataRow["Estado"] != null)
            DireccionEnvio.Estado = (System.String)dataRow["Estado"];
        if (dataRow["CP"] != null)
            DireccionEnvio.CP = (System.String)dataRow["CP"];

        if (dataRow["Telefono"] != null)
           Telefono = (System.String)dataRow["Telefono"];
        if (dataRow["Telefono2"] != null)
           Telefono2 = (System.String)dataRow["Telefono2"];
        if (dataRow["Telefono3"] != null)
           Telefono3 = (System.String)dataRow["Telefono3"];
        if (dataRow["FAX"] != null)
           FAX = (System.String)dataRow["FAX"];
        if (dataRow["LineaTransporte"] != null)
           LineaTransporte = (System.String)dataRow["LineaTransporte"];
        if (dataRow["idLineaTransporte"] != null)
            idLineaTransporte = (System.Int32)dataRow["idLineaTransporte"];
        if (dataRow["SaldoActual"] != null)
           SaldoActual = (System.Decimal)dataRow["SaldoActual"];
        if (dataRow["LimiteCredito"] != null)
           LimiteCredito = (System.Decimal)dataRow["LimiteCredito"];
        if (dataRow["WebSite"] != null)
           WebSite = (System.String)dataRow["WebSite"];
        if (dataRow["Observaciones"] != null)
           Observaciones = (System.String)dataRow["Observaciones"];
        if (dataRow["activo"] != null)
           activo = (bool)dataRow["activo"];
        if (dataRow["idListaPrecios"] != null)
            idListaPrecios = (System.Int32)dataRow["idListaPrecios"];
        if (dataRow["idVendedor"] != null)
            idVendedor = (System.Int32)dataRow["idVendedor"];
        if (dataRow["idCategoria"] != null)
            idCategoria = (System.Int32)dataRow["idCategoria"];
        if (dataRow["idCondicionesPago"] != null)
            idCondicionesPago = (System.Int32)dataRow["idCondicionesPago"];
    }
}


        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE PROVEEDORES SET ");
            strCommand.Append("fechaModificacion='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'");
            strCommand.Append(",idUsuarioModificacion='" + this.idUsuarioModificacion.ToString() + "'");
            strCommand.Append(",idEmpresa='" + this.idEmpresa.ToString() + "'");
            strCommand.Append(",NoProveedor=\"" + WLMFunctions.comillas(NoCliente) + "\"");
            strCommand.Append(",RazonSocial=\"" + WLMFunctions.comillas(RazonSocial) + "\"");
            strCommand.Append(",NombreComercial=\"" + WLMFunctions.comillas(NombreComercial) + "\"");
            strCommand.Append(",RepresentanteLegal=\"" + WLMFunctions.comillas(RepresentanteLegal) + "\"");
            strCommand.Append(",RFC=\"" + WLMFunctions.comillas(RFC) + "\"");
            strCommand.Append(",Email=\"" + WLMFunctions.comillas(Email) + "\"");

            strCommand.Append(",F_Calle=\"" + WLMFunctions.comillas(this.DireccionFacturacion.Calle) + "\"");
            strCommand.Append(",F_NumeroExterior=\"" + WLMFunctions.comillas(this.DireccionFacturacion.NumeroExterior) + "\"");
            strCommand.Append(",F_NumeroInterior=\"" + WLMFunctions.comillas(this.DireccionFacturacion.NumeroInterior) + "\"");
            strCommand.Append(",F_Colonia=\"" + WLMFunctions.comillas(this.DireccionFacturacion.Colonia) + "\"");
            strCommand.Append(",F_Municipio=\"" + WLMFunctions.comillas(this.DireccionFacturacion.Municipio) + "\"");
            strCommand.Append(",F_Ciudad=\"" + WLMFunctions.comillas(this.DireccionFacturacion.Ciudad) + "\"");
            strCommand.Append(",F_Estado=\"" + WLMFunctions.comillas(this.DireccionFacturacion.Estado) + "\"");
            strCommand.Append(",F_CP=\"" + WLMFunctions.comillas(this.DireccionFacturacion.CP) + "\"");

            strCommand.Append(",Calle=\"" + WLMFunctions.comillas(this.DireccionEnvio.Calle) + "\"");
            strCommand.Append(",NumeroExterior=\"" + WLMFunctions.comillas(this.DireccionEnvio.NumeroExterior) + "\"");
            strCommand.Append(",NumeroInterior=\"" + WLMFunctions.comillas(this.DireccionEnvio.NumeroInterior) + "\"");
            strCommand.Append(",Colonia=\"" + WLMFunctions.comillas(this.DireccionEnvio.Colonia) + "\"");
            strCommand.Append(",Ciudad=\"" + WLMFunctions.comillas(this.DireccionEnvio.Ciudad) + "\"");
            strCommand.Append(",Municipio=\"" + WLMFunctions.comillas(this.DireccionEnvio.Municipio) + "\"");
            strCommand.Append(",Estado=\"" + WLMFunctions.comillas(this.DireccionEnvio.Estado) + "\"");
            strCommand.Append(",CP=\"" + WLMFunctions.comillas(this.DireccionEnvio.CP) + "\"");

            strCommand.Append(",Telefono=\"" + WLMFunctions.comillas(Telefono) + "\"");
            strCommand.Append(",Telefono2=\"" + WLMFunctions.comillas(Telefono2) + "\"");
            strCommand.Append(",Telefono3=\"" + WLMFunctions.comillas(Telefono3) + "\"");
            strCommand.Append(",FAX=\"" + WLMFunctions.comillas(FAX) + "\"");
            strCommand.Append(",LineaTransporte=\"" + WLMFunctions.comillas(LineaTransporte) + "\"");
            strCommand.Append(",idLineaTransporte='" + this.idLineaTransporte.ToString() + "'");
            strCommand.Append(",SaldoActual=\"" + WLMFunctions.comillas(SaldoActual) + "\"");
            strCommand.Append(",LimiteCredito=\"" + WLMFunctions.comillas(LimiteCredito) + "\"");
            strCommand.Append(",WebSite=\"" + WLMFunctions.comillas(WebSite) + "\"");
            strCommand.Append(",Observaciones=\"" + WLMFunctions.comillas(Observaciones) + "\"");
            strCommand.Append(",activo='" + Convert.ToInt16(activo) + "'");
            strCommand.Append(",idListaPrecios='" + this.idListaPrecios.ToString() + "'");
            strCommand.Append(",idVendedor='" + this.idVendedor.ToString() + "'");
            strCommand.Append(",idCategoria='" + this.idCategoria.ToString() + "'");
            strCommand.Append(",idCondicionesPago='" + this.idCondicionesPago.ToString() + "'");
            strCommand.Append(" WHERE id='" + this.id + "'");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    public class ProveedorCollection
    {
        
        private List<Proveedor>items;
        public List<Proveedor> Elementos { get;set; }
        public ProveedorCollection()
        {
        }
        public ProveedorCollection(ref dbConnector ConexionDB)
        {
       
            string strCommand = "SELECT id FROM PROVEEDORES ";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
           items = new List<Proveedor>();
            while (dataReader.Read())
            {
                Proveedor newItem = new Proveedor(Convert.ToInt32(dataReader["id"]),ref ConexionDB);
               items.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }

        public ProveedorCollection(Producto producto,ref dbConnector ConexionDB)
        {
           
            string strCommand = "SELECT P.id FROM PROVEEDORES P LEFT JOIN PRODUCTO2PROVEEDOR P2P ON P2P.idProveedor=P.id WHERE P2P.idProducto='"+producto.id+"'";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
           items = new List<Proveedor>();
            while (dataReader.Read())
            {
                Proveedor newItem = new Proveedor(Convert.ToInt32(dataReader["id"]),ref ConexionDB);
               items.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }
    }

    public class ProveedorCuentaBancaria : BaseClass
    {

        #region public properties
        public int idProveedor { get;set; }
        public String institucion { get;set; }
        public String cuenta { get;set; }
        public String CLABE { get;set; }
        #endregion

        #region constructors
        public ProveedorCuentaBancaria(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            id = classBinder.NewRecord("PROVEEDORESCUENTAS");
            string queryString = "";
            queryString = "SELECT * FROM PROVEEDORESCUENTAS WHERE id='" + this.id + "'";
            GetRecord(queryString);
        }

        public ProveedorCuentaBancaria(int registryId,ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM PROVEEDORESCUENTAS WHERE id='" + registryId + "'";
            
            this.GetRecord(queryString);
        }

        public ProveedorCuentaBancaria(DataRow dataRow,ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            this.GetRecord(dataRow);
        }
        #endregion

        #region public methods


        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM PROVEEDORESCUENTAS WHERE id='" + this.id + "'";
            ConexionDBInterna.ExecuteCommand(queryString);

        }
        #endregion

        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                    id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                   fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion")))
                   fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                    idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion")))
                    idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];
                if (!reader.IsDBNull(reader.GetOrdinal("idProveedor")))
                    idProveedor = (System.Int32)reader["idProveedor"];
                if (!reader.IsDBNull(reader.GetOrdinal("institucion")))
                   institucion = (System.String)reader["institucion"];
                if (!reader.IsDBNull(reader.GetOrdinal("cuenta")))
                   cuenta = (System.String)reader["cuenta"];
                if (!reader.IsDBNull(reader.GetOrdinal("CLABE")))
                   CLABE = (System.String)reader["CLABE"];
            }
        }

        private void GetRecord(DataRow dataRow)
        {
            if (dataRow != null)
            {
                if (dataRow["id"] != null)
                    id = (System.Int32)dataRow["id"];
                if (dataRow["fechaCreacion"] != null)
                   fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
                if (dataRow["fechaModificacion"] != null)
                   fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
                if (dataRow["idUsuario"] != null)
                    idUsuario = (System.Int32)dataRow["idUsuario"];
                if (dataRow["idUsuarioModificacion"] != null)
                    idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
                if (dataRow["idProveedor"] != null)
                    idProveedor = (System.Int32)dataRow["idProveedor"];
                if (dataRow["institucion"] != null)
                   institucion = (System.String)dataRow["institucion"];
                if (dataRow["cuenta"] != null)
                   cuenta = (System.String)dataRow["cuenta"];
                if (dataRow["CLABE"] != null)
                   CLABE = (System.String)dataRow["CLABE"];
            }
        }

        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE PROVEEDORESCUENTAS set ");
            strCommand.Append("fechaModificacion='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'");
            strCommand.Append(",idUsuarioModificacion='" + this.idUsuarioModificacion.ToString() + "'");
            strCommand.Append(",idProveedor='" + this.idProveedor.ToString() + "'");
            strCommand.Append(",institucion=\"" + WLMFunctions.comillas(institucion) + "\"");
            strCommand.Append(",cuenta=\"" + WLMFunctions.comillas(cuenta) + "\"");
            strCommand.Append(",CLABE=\"" + WLMFunctions.comillas(CLABE) + "\"");
            strCommand.Append(" WHERE id='" + this.id + "'");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    public class ProveedorCuentaBancariaCollection
    {
        
        private List<ProveedorCuentaBancaria>items;
        public List<ProveedorCuentaBancaria> Elementos { get;set; }
        public ProveedorCuentaBancariaCollection()
        {
        }
        public ProveedorCuentaBancariaCollection(ref dbConnector ConexionDB)
        {
         
            string strCommand = "SELECT id FROM PROVEEDORESCUENTAS ";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
           items = new List<ProveedorCuentaBancaria>();
            while (dataReader.Read())
            {
                ProveedorCuentaBancaria newItem = new ProveedorCuentaBancaria(Convert.ToInt32(dataReader["id"]),ref ConexionDB);
               items.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }

        public ProveedorCuentaBancariaCollection(Proveedor proveedor,ref dbConnector ConexionDB)
        {
           
            string strCommand = "SELECT id FROM PROVEEDORESCUENTAS WHERE idProveedor='"+proveedor.id+"'";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
           items = new List<ProveedorCuentaBancaria>();
            while (dataReader.Read())
            {
                ProveedorCuentaBancaria newItem = new ProveedorCuentaBancaria(Convert.ToInt32(dataReader["id"]),ref ConexionDB);
               items.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }
    }

    public class ProductoAProveedor : BaseClass
    {


        #region public properties
        public int idProducto { get;set; }
        public int idProveedor { get;set; }
        public Decimal PrecioProveedor { get;set; }
        #endregion

        #region constructors
        public ProductoAProveedor(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            id = classBinder.NewRecord("PRODUCTO2PROVEEDOR");
            string queryString = "";
            queryString = "SELECT * FROM PRODUCTO2PROVEEDOR WHERE id='" + this.id + "'";
            GetRecord(queryString);
        }

        public ProductoAProveedor(int registryId,ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM PRODUCTO2PROVEEDOR WHERE id='" + registryId + "'";
            
            this.GetRecord(queryString);
        }

        public ProductoAProveedor(Producto producto,Proveedor proveedor,ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM PRODUCTO2PROVEEDOR WHERE idProducto='" + producto.id + "' AND idProveedor='"+proveedor.id+"'";
            
            this.GetRecord(queryString);
        }

        public ProductoAProveedor(DataRow dataRow,ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            this.GetRecord(dataRow);
        }
        #endregion

        #region public methods


        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM PRODUCTO2PROVEEDOR WHERE id='" + this.id + "'";
            ConexionDBInterna.ExecuteCommand(queryString);

        }
        #endregion


        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                    id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                   fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion")))
                   fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                    idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion")))
                    idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];
                if (!reader.IsDBNull(reader.GetOrdinal("idProducto")))
                    idProducto = (System.Int32)reader["idProducto"];
                if (!reader.IsDBNull(reader.GetOrdinal("idProveedor")))
                    idProveedor = (System.Int32)reader["idProveedor"];
                if (!reader.IsDBNull(reader.GetOrdinal("PrecioProveedor")))
                   PrecioProveedor = (System.Decimal)reader["PrecioProveedor"];
            }
        }


        private void GetRecord(DataRow dataRow)
        {
            if (dataRow != null)
            {
                if (dataRow["id"] != null)
                    id = (System.Int32)dataRow["id"];
                if (dataRow["fechaCreacion"] != null)
                   fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
                if (dataRow["fechaModificacion"] != null)
                   fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
                if (dataRow["idUsuario"] != null)
                    idUsuario = (System.Int32)dataRow["idUsuario"];
                if (dataRow["idUsuarioModificacion"] != null)
                    idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
                if (dataRow["idProducto"] != null)
                    idProducto = (System.Int32)dataRow["idProducto"];
                if (dataRow["idProveedor"] != null)
                    idProveedor = (System.Int32)dataRow["idProveedor"];
                if (dataRow["PrecioProveedor"] != null)
                   PrecioProveedor = (System.Decimal)dataRow["PrecioProveedor"];
            }
        }


        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE PRODUCTO2PROVEEDOR set ");
            strCommand.Append("fechaModificacion='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'");
            strCommand.Append(",idUsuarioModificacion='" + this.idUsuarioModificacion.ToString() + "'");
            strCommand.Append(",idProducto='" + this.idProducto.ToString() + "'");
            strCommand.Append(",idProveedor='" + this.idProveedor.ToString() + "'");
            strCommand.Append(",PrecioProveedor=\"" + WLMFunctions.comillas(PrecioProveedor) + "\"");
            strCommand.Append(" WHERE id='" + this.id + "'");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    public class ProductoAProveedorCollection
    {
        
        private List<ProductoAProveedor>items;
        public List<ProductoAProveedor> Elementos { get;set; }
        public ProductoAProveedorCollection()
        {
        }
        public ProductoAProveedorCollection(ref dbConnector ConexionDB)
        {
      
            string strCommand = "SELECT id FROM PRODUCTO2PROVEEDOR ";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
           items = new List<ProductoAProveedor>();
            while (dataReader.Read())
            {
                ProductoAProveedor newItem = new ProductoAProveedor(Convert.ToInt32(dataReader["id"]),ref ConexionDB);
               items.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }

        public ProductoAProveedorCollection(Producto producto,ref dbConnector ConexionDB)
        {
            string strCommand = "SELECT id FROM PRODUCTO2PROVEEDOR WHERE idProducto='"+producto.id+"'";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
           items = new List<ProductoAProveedor>();
            while (dataReader.Read())
            {
                ProductoAProveedor newItem = new ProductoAProveedor(Convert.ToInt32(dataReader["id"]),ref ConexionDB);
               items.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }
    }


}
